======================================================================
Carpeta de salida: C:\Users\julia\Downloads\Resultados_Pronostico_Oro
======================================================================
PASO 1: Descarga automatica de datos (Yahoo Finance + FRED + GPR)
======================================================================
  Yahoo Finance: 14 series descargadas.
  FRED CPIAUCSL   -> CPI       (desfasada 1 mes): OK, 953 obs
  FRED FEDFUNDS   -> FEDFUNDS  (sin desfase): OK, 864 obs
  FRED M2SL       -> M2        (desfasada 1 mes): OK, 809 obs
  GPR (Caldara-Iacoviello) -> OK, 498 obs (sin desfase, casi tiempo real)

  Hoy: 2026-07-06  |  Ultimo mes completo usado: 2026-06
  Dataset: 138 obs x 18 variables  [2015-01-31 -> 2026-06-30]
  Variables: ['Petroleo_WTI', 'SP500', 'DXY', 'USD_CNY', 'GDX', 'Cobre', 'Plata', 'Gas_Natural', 'Platino', 'US10Y', 'VIX', 'TIP', 'EUR_USD', 'Oro', 'CPI', 'FEDFUNDS', 'M2', 'GPR']
  -> datasetFinal_v4.csv guardado

  Entrenamiento : 2020-01-01 -> 2025-12-31
  Prueba real   : 2026-01-01 -> 2026-05-31
  Pronostico MC : 2026-07 -> 2027-12-31
  fig01_series_historicas.png guardada (OK)

======================================================================
PASO 2: Estacionariedad (ADF + KPSS) -- muestra completa 2015-2026
======================================================================

  Variable           ADF p    KPSS p  Conclusion
  --------------------------------------------------
  Oro               0.9808    0.0100  NO estac. (I(1))
  Petroleo_WTI      0.0730    0.0100  NO estac. (I(1))
  Cobre             0.9817    0.0100  NO estac. (I(1))
  Plata             0.9980    0.0100  NO estac. (I(1))
  Gas_Natural       0.0744    0.1000  NO estac. (I(1))
  Platino           0.3375    0.0272  NO estac. (I(1))
  SP500             0.9981    0.0100  NO estac. (I(1))
  DXY               0.0775    0.0100  NO estac. (I(1))
  USD_CNY           0.1211    0.0100  NO estac. (I(1))
  US10Y             0.7486    0.0100  NO estac. (I(1))
  VIX               0.0000    0.0886  Estacionaria
  TIP               0.8302    0.0100  NO estac. (I(1))
  EUR_USD           0.0456    0.1000  Estacionaria
  GPR               0.0014    0.0100  NO estac. (I(1))
  CPI               0.9808    0.0100  NO estac. (I(1))
  FEDFUNDS          0.4043    0.0100  NO estac. (I(1))
  M2                0.7020    0.0100  NO estac. (I(1))
  GDX               0.7338    0.0100  NO estac. (I(1))

  -> Todas no estacionarias en niveles. Se modela sobre log-retornos.

======================================================================
PASO 3: Transformacion a log-retornos
======================================================================
  Observaciones tras diferenciacion: 137
    Oro           : ADF p=0.0000  OK Estacionaria
    Petroleo_WTI  : ADF p=0.0000  OK Estacionaria
    Cobre         : ADF p=0.0000  OK Estacionaria
    Plata         : ADF p=0.0000  OK Estacionaria
    Gas_Natural   : ADF p=0.0000  OK Estacionaria
    Platino       : ADF p=0.0000  OK Estacionaria
    SP500         : ADF p=0.0000  OK Estacionaria
    DXY           : ADF p=0.0000  OK Estacionaria
    USD_CNY       : ADF p=0.0000  OK Estacionaria
    US10Y         : ADF p=0.0000  OK Estacionaria
    VIX           : ADF p=0.0000  OK Estacionaria
    TIP           : ADF p=0.0000  OK Estacionaria
    EUR_USD       : ADF p=0.0000  OK Estacionaria
    GPR           : ADF p=0.0000  OK Estacionaria
    CPI           : p=0.2543
    FEDFUNDS      : ADF p=0.0000  OK Estacionaria
    M2            : p=0.1765
    GDX           : ADF p=0.0000  OK Estacionaria

======================================================================
PASO 3B: Factor PCA (proxy simplificado de modelo de factores dinamicos)
======================================================================
  PC1 (loadings ajustados solo en train 2020-2025) explica 28.3% de la varianza del panel de 16 variables
  Se usa como predictor unico en el conjunto adicional 'FACTOR' (ver Paso 6)

======================================================================
PASO 4: Test de Cointegracion de Johansen
======================================================================
  Nota metodologica: esta prueba NO se presenta
  como un prerrequisito de los modelos de ML -- se incluye como evidencia
  complementaria de la estructura de equilibrio de largo plazo del
  mercado, que contextualiza el modelado en retornos de corto plazo y
  fundamenta la linea de investigacion futura de un modelo VECM.

  Variables: ['Oro', 'SP500', 'US10Y', 'Plata', 'Cobre', 'DXY']
     r       Traza      VC 95%  Resultado
  r<=0    136.6694     95.7542  Rechaza H0
  r<=1     86.2327     69.8189  Rechaza H0
  r<=2     53.3178     47.8545  Rechaza H0
  r<=3     27.4162     29.7961  No rechaza
  r<=4     12.4439     15.4943  No rechaza
  r<=5      4.0279      3.8415  Rechaza H0

  -> 4 vector(es) cointegrante(s) detectado(s).

======================================================================
PASO 5: Causalidad de Granger (X -> Oro, maxlag=3)
======================================================================
  Nota: 'Granger-causa' se interpreta estrictamente
  como PRECEDENCIA PREDICTIVA (X mejora la prediccion de Y mas alla del
  propio pasado de Y), NO como causalidad economica o estructural.

  Variable         min p-value  Conclusion
  ----------------------------------------
  Petroleo_WTI          0.1479  No causa
  Cobre                 0.0846  No causa
  Plata                 0.5636  No causa
  Gas_Natural           0.5362  No causa
  Platino               0.5271  No causa
  SP500                 0.0218  Granger-causa OK
  DXY                   0.3531  No causa
  USD_CNY               0.3095  No causa
  US10Y                 0.0278  Granger-causa OK
  VIX                   0.0676  No causa
  TIP                   0.4156  No causa
  EUR_USD               0.2481  No causa
  GPR                   0.5639  No causa
  CPI                   0.1504  No causa
  FEDFUNDS              0.2133  No causa
  M2                    0.0602  No causa
  GDX (ref.)            0.8160  No causa -> excluida como predictor principal

  Variables Granger-causales: ['SP500', 'US10Y']
  De las cuales NUEVAS: ninguna

======================================================================
PASO 6: Conjuntos de variables a comparar
======================================================================

  REDUCED (7 vars, SIN GDX): ['Cobre', 'Gas_Natural', 'Petroleo_WTI', 'Plata', 'Platino', 'SP500', 'US10Y']
  CONTROL (8 vars): REDUCED + GDX_ret rezagado 1 mes
  FULL (17 vars, CON GDX contemporaneo): ['Petroleo_WTI', 'Cobre', 'Plata', 'Gas_Natural', 'Platino', 'SP500', 'DXY', 'USD_CNY', 'US10Y', 'VIX', 'TIP', 'EUR_USD', 'GPR', 'CPI', 'FEDFUNDS', 'M2', 'GDX']
  FACTOR (2 vars): Commodities agregados + PC1_Factor (diffusion index)

======================================================================
PASO 7: VIF -- conjunto REDUCED (2020-2025)
======================================================================
  Cobre         : VIF =   1.69  OK
  Gas_Natural   : VIF =   1.06  OK
  Petroleo_WTI  : VIF =   1.79  OK
  Plata         : VIF =   2.95  OK
  Platino       : VIF =   2.97  OK
  SP500         : VIF =   1.38  OK
  US10Y         : VIF =   1.74  OK
  fig02_vif_reduced.png guardada (OK)

======================================================================
PASO 8: Particion temporal -- Train 2020-2025 / Test Ene-May 2026
        + particion de SENSIBILIDAD Ago2025-May2026
======================================================================
  REDUCED : 8 features | train=72 obs | test=5 obs
  CONTROL : 9 features | train=72 obs | test=5 obs
  FULL    : 18 features | train=72 obs | test=5 obs
  FACTOR  : 7 features | train=72 obs | test=5 obs

  Periodo de prueba OFICIAL: 2026-01 -> 2026-05
  Periodo de prueba SENSIBILIDAD: 2025-08 -> 2026-05  (n=10, vs n=5 oficial)

======================================================================
PASO 9: Busqueda de hiperparametros (grid search, 1 nivel) + CV + Test
        CV: TimeSeriesSplit 5-fold (expanding), gap=1
======================================================================

  Conjunto  Modelo           CV MAPE    +-SD   Test MAE   Test RMSE   Test MAPE
  ------------------------------------------------------------------------------
  REDUCED   LR                 1.87%  +-0.43%     176.15      197.24       3.66%
  REDUCED   Ridge              2.30%  +-0.36%     183.20      192.93       3.82%
  REDUCED   ElasticNet         2.79%  +-0.36%     240.85      247.73       5.04%
  REDUCED   BayesianRidge      1.75%  +-0.51%     168.93      190.65       3.51%
  REDUCED   RF                 2.01%  +-0.54%     181.70      199.26       3.77%
  REDUCED   XGB                2.81%  +-0.37%     240.85      247.73       5.04%
  REDUCED   LGBM               2.81%  +-0.37%     240.85      247.73       5.04%
  REDUCED   SVR                2.05%  +-0.49%     214.89      227.48       4.48%
  CONTROL   LR                 1.85%  +-0.44%     176.03      202.04       3.66%
  CONTROL   Ridge              2.29%  +-0.35%     173.71      182.68       3.62%
  CONTROL   ElasticNet         2.79%  +-0.36%     240.85      247.73       5.04%
  CONTROL   BayesianRidge      1.74%  +-0.52%     165.10      188.26       3.43%
  CONTROL   RF                 2.02%  +-0.56%     174.37      191.11       3.62%
  CONTROL   XGB                2.81%  +-0.37%     240.85      247.73       5.04%
  CONTROL   LGBM               2.81%  +-0.37%     240.85      247.73       5.04%
  CONTROL   SVR                2.09%  +-0.52%     209.39      214.23       4.37%
  FULL      LR                 1.81%  +-0.35%      89.74      113.55       1.86%
  FULL      Ridge              2.03%  +-0.30%     156.92      165.99       3.26%
  FULL      ElasticNet         2.75%  +-0.36%     236.36      242.92       4.95%
  FULL      BayesianRidge      1.44%  +-0.34%      93.93      119.15       1.94%
  FULL      RF                 1.74%  +-0.36%     128.41      133.48       2.69%
  FULL      XGB                2.81%  +-0.37%     240.85      247.73       5.04%
  FULL      LGBM               2.81%  +-0.37%     240.85      247.73       5.04%
  FULL      SVR                1.81%  +-0.44%     172.91      176.37       3.60%
  FACTOR    LR                 2.04%  +-0.45%     158.96      190.69       3.31%
  FACTOR    Ridge              1.95%  +-0.47%     177.49      196.12       3.71%
  FACTOR    ElasticNet         2.13%  +-0.49%     219.01      221.63       4.59%
  FACTOR    BayesianRidge      2.04%  +-0.56%     148.41      184.11       3.09%
  FACTOR    RF                 1.97%  +-0.55%     196.49      218.00       4.09%
  FACTOR    XGB                2.81%  +-0.37%     240.85      247.73       5.04%
  FACTOR    LGBM               2.81%  +-0.37%     240.85      247.73       5.04%
  FACTOR    SVR                2.03%  +-0.54%     234.83      266.75       4.89%

  Hiperparametros seleccionados (grid search, particion OFICIAL):
    REDUCED   Ridge        : {'alpha': 0.5}
    REDUCED   ElasticNet   : {'alpha': 0.01, 'l1_ratio': 0.2}
    REDUCED   RF           : {'max_depth': 4, 'min_samples_leaf': 3, 'n_estimators': 200}
    REDUCED   XGB          : {'learning_rate': 0.03, 'max_depth': 2, 'n_estimators': 100}
    REDUCED   LGBM         : {'learning_rate': 0.03, 'max_depth': 2, 'n_estimators': 100}
    REDUCED   SVR          : {'svr__C': 1, 'svr__epsilon': 0.005}
    CONTROL   Ridge        : {'alpha': 0.5}
    CONTROL   ElasticNet   : {'alpha': 0.01, 'l1_ratio': 0.2}
    CONTROL   RF           : {'max_depth': 4, 'min_samples_leaf': 3, 'n_estimators': 300}
    CONTROL   XGB          : {'learning_rate': 0.03, 'max_depth': 2, 'n_estimators': 100}
    CONTROL   LGBM         : {'learning_rate': 0.03, 'max_depth': 2, 'n_estimators': 100}
    CONTROL   SVR          : {'svr__C': 1, 'svr__epsilon': 0.01}
    FULL      Ridge        : {'alpha': 0.5}
    FULL      ElasticNet   : {'alpha': 0.01, 'l1_ratio': 0.2}
    FULL      RF           : {'max_depth': 2, 'min_samples_leaf': 3, 'n_estimators': 200}
    FULL      XGB          : {'learning_rate': 0.03, 'max_depth': 2, 'n_estimators': 100}
    FULL      LGBM         : {'learning_rate': 0.03, 'max_depth': 2, 'n_estimators': 100}
    FULL      SVR          : {'svr__C': 1, 'svr__epsilon': 0.005}
    FACTOR    Ridge        : {'alpha': 0.5}
    FACTOR    ElasticNet   : {'alpha': 0.01, 'l1_ratio': 0.2}
    FACTOR    RF           : {'max_depth': 4, 'min_samples_leaf': 3, 'n_estimators': 200}
    FACTOR    XGB          : {'learning_rate': 0.03, 'max_depth': 2, 'n_estimators': 100}
    FACTOR    LGBM         : {'learning_rate': 0.03, 'max_depth': 2, 'n_estimators': 100}
    FACTOR    SVR          : {'svr__C': 1, 'svr__epsilon': 0.01}

  >>> MEJOR COMBINACION GLOBAL: conjunto=FULL, modelo=LR  (Test MAPE=1.86%)

  >>> MODELO DE PRODUCCION (grilla original REDUCED/CONTROL x 6 modelos): CONTROL/Ridge
      Test MAPE = 3.62%  (vs 1.86% del mejor global sin restriccion)
      [Referencia, NO seleccionable como produccion] Mejor de la grilla ampliada (incl. ElasticNet/BayesianRidge/FACTOR): ('FACTOR', 'BayesianRidge')

  [NOTA METODOLOGICA] Modelos/conjuntos adicionales (ElasticNet, BayesianRidge,
  FACTOR) se muestran en la tabla y figuras como comparacion, pero NO son
  elegibles para 'modelo de produccion'. Motivo: ampliar la grilla de 18 a 32
  combinaciones incrementa el riesgo de que la 'mejor' combinacion en el test
  set de solo 5 meses sea producto del azar y no una mejora real (exactamente
  la preocupacion de sobreajuste con una muestra pequena. Se
  mantiene la comparabilidad con el manuscrito ya escrito (CONTROL/RF) y se
  evita introducir un problema de comparaciones multiples no controlado.

======================================================================
PASO 9B: Re-evaluacion con particion de SENSIBILIDAD (2025-08-01 -> 2026-05-31, n=10)
======================================================================
  Objetivo: verificar si el ranking de modelos es estable al extender
  el test set de 5 a ~10 observaciones (para verificar estabilidad del
  ranking de modelos).

  Ranking OFICIAL   (n= 5): mejor produccion = CONTROL/Ridge (MAPE=3.62%)
  Ranking SENSIBLE  (n=10): mejor produccion = CONTROL/Ridge (MAPE=3.15%)
  -> Ranking ESTABLE (misma combinacion ganadora)
  -> sensibilidad_test_extendido.csv guardado

  Tabla detallada real vs. predicho (CONTROL/Ridge, entrenado solo hasta 2025-07-31):
  Fecha  Precio_Real_USD_oz  Precio_Predicho_USD_oz  Error_Absoluto_USD  Error_Porcentual
2025-08             3372.74                 3359.17               13.57              0.40
2025-09             3682.30                 3480.68              201.62              5.48
2025-10             4044.37                 3823.11              221.26              5.47
2025-11             4082.12                 4099.67               17.55              0.43
2025-12             4311.06                 4280.03               31.03              0.72
2026-01             4730.86                 4585.09              145.77              3.08
2026-02             5011.04                 4741.40              269.64              5.38
2026-03             4856.39                 4996.76              140.37              2.89
2026-04             4721.63                 4886.95              165.32              3.50
2026-05             4589.69                 4781.75              192.06              4.18
  -> precision_detalle_ago2025_a_hoy.csv guardado
  fig03_scatter_real_vs_pred_sensibilidad.png guardada (OK)
  fig04_real_vs_predicho_sensibilidad.png guardada (OK)
  fig05_error_temporal_sensibilidad.png guardada (OK)
  fig06_mape_set_x_modelo.png guardada (OK)

======================================================================
PASO 10: Benchmarks ingenuos -- random walk, media historica, suavizamiento exponencial
======================================================================
  (Campbell & Thompson, 2008: superar a la media historica fuera de
   muestra es una prueba exigente; se reporta con honestidad).

  Benchmark             MAE        RMSE       MAPE
  ------------------------------------------------
  RandomWalk         224.26      250.69      4.68%
  HistAvg            240.85      247.73      5.04%
  ExpSmoothing       470.86      491.89      9.77%

  Produccion (CONTROL/Ridge): MAPE = 3.62%
    vs RandomWalk    : MEJOR por 1.06 pp de MAPE
    vs HistAvg       : MEJOR por 1.42 pp de MAPE
    vs ExpSmoothing  : MEJOR por 6.15 pp de MAPE
  -> benchmarks_comparacion.csv guardado
  fig07_produccion_vs_benchmarks.png guardada (OK)

======================================================================
PASO 11: Pruebas formales de comparacion de pronosticos
======================================================================
  *** ADVERTENCIA GENERAL DE POTENCIA ESTADISTICA ***
  El test set oficial tiene solo n=5 observaciones. TODAS las
  pruebas de esta seccion (Clark-West, Diebold-Mariano, encompassing, MCS)
  tienen POTENCIA ESTADISTICA MUY BAJA con una muestra tan pequena. Se
  reportan de todas formas por rigurosidad metodologica,
  pero los resultados deben interpretarse con extrema cautela -- una
  diferencia 'no significativa' puede simplemente reflejar falta de
  poder estadistico, no ausencia real de diferencia.

  --- Clark-West (West, 1996 / Clark & West, 2007) -- modelos ANIDADOS ---
    REDUCED vs CONTROL  (Ridge): CW=+1.764  p=0.039  (el modelo mas grande mejora significativamente, p<0.10)
    REDUCED vs FULL     (Ridge): CW=+2.009  p=0.022  (el modelo mas grande mejora significativamente, p<0.10)

  --- Diebold-Mariano (Diebold & Mariano, 1995) -- vs benchmarks NO anidados ---
    Produccion vs RandomWalk    : DM=-0.960  p=0.337  (sin evidencia suficiente -- ver advertencia de potencia)
    Produccion vs HistAvg       : DM=-1.299  p=0.194  (sin evidencia suficiente -- ver advertencia de potencia)
    Produccion vs ExpSmoothing  : DM=-3.593  p=0.000  (diferencia significativa, p<0.10)

  --- Forecast encompassing test (Harvey, Leybourne & Newbold, 1998) ---
    Produccion encompasses RandomWalk    : t=-0.460  p=0.677  (no se rechaza H0 -- ver advertencia de potencia)
    Produccion encompasses HistAvg       : t=-0.470  p=0.670  (no se rechaza H0 -- ver advertencia de potencia)
    Produccion encompasses ExpSmoothing  : t=+1.230  p=0.306  (no se rechaza H0 -- ver advertencia de potencia)

  --- Model Confidence Set (Hansen, Lunde & Nason, 2011) ---
    Modelos incluidos en el Model Confidence Set (alpha=0.25): ['RandomWalk', 'Ridge']
    p-values: {'ExpSmoothing': np.float64(0.001), 'HistAvg': np.float64(0.179), 'RandomWalk': np.float64(0.328), 'Ridge': np.float64(1.0)}
    -> mcs_resultados.csv guardado

  -> diebold_mariano_clark_west.csv guardado (incluye advertencia de potencia en el log)

======================================================================
PASO 12: Diagnostico de residuos -- CONTROL/Ridge
======================================================================
  Durbin-Watson    : 1.1458
  Ljung-Box p      : 0.2930
  Jarque-Bera p    : 0.7172
  Shapiro-Wilk p   : 0.2258

  Residuos OOS (retornos) para Monte Carlo: n=60, std=0.02901

======================================================================
PASO 12B: Bootstrap de bloques (block_len=3, N=2000) -- estabilidad del MAPE de CV
======================================================================
  MAPE bootstrap: media=3.61%  IC90%=[3.13%, 4.11%]  mediana=3.60%
  -> Un intervalo amplio indica que el MAPE puntual reportado es sensible
     a que meses especificos caen en el fold de validacion -- se reporta
     con transparencia en vez de un solo numero que sugiera falsa precision.
  fig08_bootstrap_estabilidad_mape.png guardada (OK)

======================================================================
PASO 13: GARCH(1,1) -- diagnostico de volatilidad (stylized fact: agrupamiento de volatilidad)
======================================================================
  omega=0.78584  alpha1=0.0510  beta1=0.8858
  Persistencia (alpha+beta) = 0.9368
  fig09_garch_volatilidad.png guardada (OK)

======================================================================
PASO 13B: Quiebre estructural (Chow, fecha candidata 2024-01-01) + Exponente de Hurst (memoria larga)
======================================================================
  Chow test (quiebre en 2024-01): F=2.862  p=0.0060  (quiebre estructural detectado)
  Exponente de Hurst (retornos de oro): H=-0.070  anti-persistente
  -> quiebre_estructural_hurst.csv guardado

======================================================================
PASO 14: Reentrenamiento final -- CONTROL/Ridge
         Datos: 2015-03 -> 2026-06
======================================================================
  Modelo reentrenado con historico completo (train+test).
  Hiperparametros finales (grid search): {'alpha': 0.5}

======================================================================
PASO 14B: SHAP values + Partial Dependence Plots (interpretacion economica)
======================================================================
  [INFO] libreria 'shap' no disponible -- paso omitido (instalar con: pip install shap)

======================================================================
PASO 15: Simulacion Monte Carlo -- N=100,000 iteraciones
         Horizonte: 2026-07 -> 2027-12-31
======================================================================
  Variables simuladas (Normal Multivariada, escenario principal): ['Cobre', 'Gas_Natural', 'Petroleo_WTI', 'Plata', 'Platino', 'SP500', 'US10Y', 'GDX']

  --- Diagnostico distribucional de los shocks de predictores (Monte Carlo) ---
  Variable          Skewness   Kurtosis(exc)   Jarque-Bera p
  ----------------------------------------------------------
  Cobre               -1.056           2.359          0.0000  <-- no-normal
  Gas_Natural         -0.743           1.202          0.0026  
  Petroleo_WTI        -0.680           7.543          0.0000  <-- no-normal
  Plata                0.920           2.674          0.0000  
  Platino              0.165           1.732          0.0064  
  SP500               -2.312           9.610          0.0000  <-- no-normal
  US10Y               -1.694           8.264          0.0000  <-- no-normal
  GDX                  0.081          -0.511          0.6269  

  Variables con distribucion notablemente no-normal: ['Cobre', 'Petroleo_WTI', 'SP500', 'US10Y']
  -> Se corre un escenario adicional de ROBUSTEZ con shocks t-multivariada
     (colas mas pesadas que la normal) para contrastar la sensibilidad de
     las bandas de incertidumbre a este supuesto distribucional.

  Horizonte de pronostico: 18 meses

  --- ESCENARIO PRINCIPAL: deriva cero (random walk), shocks normales ---
  --- ESCENARIO DE SENSIBILIDAD: deriva historica, shocks normales ---
  --- ESCENARIO DE ROBUSTEZ: deriva cero, shocks t-multivariada (df=5) ---
      (colas mas pesadas -- contraste de sensibilidad al supuesto de normalidad)

  Comparacion de bandas en el ultimo mes del horizonte (2027-12):
    Normal  (principal) : P5-P95 = [3916, 6674]
    t-mult. (robustez)  : P5-P95 = [3917, 6688]
    -> El escenario de colas pesadas es +0.5% mas ancho que el normal (cuantifica el costo de asumir normalidad si las colas reales son mas pesadas).

======================================================================
PASO 15C: Conformal prediction (split-conformal) + Quantile Regression Forest
======================================================================
  ADVERTENCIA: el set de calibracion (test oficial, n=5) es muy pequeno
  -- el cuantil empirico usado por conformal prediction es poco estable
  con tan pocas observaciones. Se reporta como alternativa exploratoria,
  no como reemplazo de las bandas Monte Carlo.

  Conformal prediction (90% cobertura marginal, split-conformal):
    Semi-ancho calibrado: +/-268.3 USD/oz
    Intervalo para 2026-07: [3979, 4515]
    Monte Carlo P5-P95 para el mismo mes: [4009, 4512]

  Quantile Regression Forest (GradientBoostingRegressor, loss='quantile'):
    Test set -- banda P5-P95 promedio: [4659, 5023]  (Monte Carlo equivalente en el mismo periodo: ver fig. de pronostico tactico)
  -> conformal_vs_montecarlo.csv guardado

======================================================================
PASO 15D: Rolling-window (ventana fija=48 meses) -- modelo de produccion CONTROL/Ridge
======================================================================
  Distinto del expanding-window ya usado en el CV de entrenamiento:
  aqui la ventana de entrenamiento es de tamano FIJO y se desliza un mes
  a la vez, evaluando siempre el siguiente mes fuera de esa ventana.
  87 reentrenamientos con ventana fija de 48 meses
  MAPE rolling: media=2.17%  mediana=1.84%  std=1.64%
  fig10_rolling_window_error.png guardada (OK)
  -> rolling_window_produccion.csv guardado

======================================================================
PASO 16: Backtesting de timing de ventas (Ene-May 2026)
======================================================================

  Ingresos PASIVO: USD 768,710.73
  Ingresos ACTIVO: USD 763,532.59
  Mejora: -0.67%
  Bootstrap (n=2000) sobre la diferencia activo-pasivo: P(resultado tan extremo por azar) approx 0.951  -- con n=5 meses, este resultado (positivo o negativo) no es distinguible de ruido estadistico.
  -> backtesting_ventas_v4.csv guardado

  -> comparacion_conjuntos_modelos_v4.csv
  -> comparacion_real_vs_predicho_2026_v4.csv
  -> pronostico_tactico_dic2026_v4.csv
  -> pronostico_estrategico_dic2027_v4.csv

======================================================================
Generando figuras finales
======================================================================
  fig11_serie_predicciones.png guardada (OK)
  fig12_real_vs_predicho_2026.png guardada (OK)
  fig13_distribucion_dic2027_normal_vs_robusto.png guardada (OK)
  fig14_coeficientes.png guardada (OK)
  fig15_backtesting_ventas.png guardada (OK)
  fig16_correlacion_retornos.png guardada (OK)
  fig17_error_temporal.png guardada (OK)
  fig18_scatter_real_vs_pred.png guardada (OK)
  fig19_mae_rmse_comparacion.png guardada (OK)

  --- HORIZONTE TACTICO (Jun-Dic 2026, 6 meses) ---
  Dic 2026: mediana=4482 USD/oz (+5.8% vs. ultimo precio), ancho de banda P5-P95 = 30.8%

  --- HORIZONTE ESTRATEGICO (Jun 2026-Dic 2027, 18 meses) ---
  Dic 2027: mediana=5106 USD/oz (+20.6% vs. ultimo precio), ancho de banda P5-P95 = 54.0%
  fig20_pronostico_tactico_dic2026.png guardada (OK)
  fig21_pronostico_estrategico_dic2027.png guardada (OK)